#include "../include/log_in.h"


// 声明函数

// 登陆的密码验证
Log_in_data log_in(Double_Link_List *list_1, Double_Link_List *list_2)
{
    Log_in_data log_data;
    Double_Node *ptr = NULL;
    memset(&log_data, 0, sizeof(log_data));
    if (NULL == list_1 || NULL == list_2)
    {
        ERRLOG("链表的动态空间为空");
        return log_data;
    }
    // 登陆次数控制
    int num = 3;

    while (1)
    {

        // 用户输入账号以及密码
        printf("输入你的账号:");
        scanf("%s", log_data.name);
        printf("输入你的密码:");
        scanf("%s", log_data.password);

        if (NULL != (ptr = find_double_node_name(list_1, log_data.name)))
        {
            if (!strcmp(ptr->data.password, log_data.password))
            {
                printf("登陆成功\n");
                log_data = ptr->data;
                return log_data;
            }
        }
        if (NULL != (ptr = find_double_node_name(list_2, log_data.name)))
        {
            if (!strcmp(ptr->data.password, log_data.password))
            {
                printf("登陆成功 \n");
                log_data = ptr->data;
                return log_data;
            }
        }
        num--;
        if (0 == num)
        {
            printf("三次输入错误 请稍后再试\n");
            exit(-1); // 退出进程
        }
        }
}

// 注册
void reg(Double_Link_List *list)
{
    if (NULL == list)
    {
        ERRLOG("链表的动态空间为空");
        return ;
    }
    Log_in_data log_data;
    char password[128];
    log_data.id = 0;
    printf("请输入你 账号:\n");
    scanf("%s" , log_data.name);

    printf("请输入你的密码:\n");
    scanf("%s" , log_data.password);

    printf("请再次输入你的密码:\n");
    scanf("%s" , password);
    
    if (strcmp(password , log_data.password))
    {
        printf("两次密码输入不相同 请重新运行本程序\n");
        exit(-1);
    }

    printf("恭喜你 注册成功\n");

    // 插入到链表
    
    insert_double_node(list , log_data , 1);

    // 写入到文件
    F_print( list , "2_dom_data.txt" );
}

// 修改用户信息
void root_amend(Double_Link_List *dom_list , Double_Link_List *root_list , char * name)
{
    /*=================================== 安全判断 ==================================*/
    if (NULL == dom_list || NULL == root_list)
    {
        ERRLOG("链表的动态空间为空");
        return ;
    }
    // 身份判定
    if (1 != root_list->next->data.id)
    {
        ERRLOG("非超级用户\n");
        return ;
    }

    /*=================================== 查找用户 ==================================*/

    Double_Node * ptr = find_double_node_name( dom_list ,  name);
    if (NULL == ptr)
    {
        ERRLOG("没有该用户\n");
        return ;
    }

    /*=================================== 用户输入 ==================================*/
    int pos = 0;    // 用于存储 用户在用户链表中的位置 <权限修改-删除使用>
    int num = 0;    // 用于存储 用户输入的 选择信息
    char buf[128];  // 用于存储 用户输入的 账号 和 密码

    printf("请输入你需要修改的信息 1 账号 2 密码 3 升级权限:\n");
    scanf("%d" , &num);

    /*=================================== 处理用户信息 ==================================*/

    switch (num)
    {
    case 1:
        // 修改账号
        printf("请输入你的账号");
        scanf("%s" , buf);
        strcpy( ptr->data.name ,  buf);
        printf("账号修改成功 账号为 %s\n" , buf);
        // 5 写入文件
        F_print(dom_list , "2_dom_data.txt");
        F_print(root_list , "1_root_data.txt");
        break;
    case 2:
        // 修改密码
        printf("请输入你的密码");
        scanf("%s" , buf);
        if (!strcmp( ptr->data.password , buf ))
        {
            printf("你个笨蛋 新密码 不能和旧密码相同\n");
            return ;
        }
        strcpy( ptr->data.password ,  buf);
        printf("密码修改成功 密码为 %s\n" , buf);
        // 5 写入文件
        F_print(dom_list , "2_dom_data.txt");
        F_print(root_list , "1_root_data.txt");
        break;
    case 3:
        // 2 修改权限 
        ptr->data.id = 1;
        // 3 将用户信息写入到 管理员链表中
        insert_double_node( root_list , ptr->data , 1 );
        // 4 将用户信息 从普通链表中删除 
        delete_double_node(  dom_list ,  find_double_node_name_pos( dom_list , name) );
        // 5 写入文件
        F_print(dom_list , "2_dom_data.txt");
        F_print(root_list , "1_root_data.txt");

        printf("恭喜 \"%s\" 用户 成功升级为 svip\n" , ptr->data.name);
        break;
    default:
        break;
    }


}


void root_func(Double_Link_List * root_list , Double_Link_List *dom_list )
{
    /*=================================== 安全判断 ==================================*/
    if (NULL == dom_list || NULL == root_list)
    {
        ERRLOG("链表的动态空间为空");
        return ;
    }
    // 身份判定
    if (1 != root_list->next->data.id)
    {
        ERRLOG("非超级用户\n");
        return ;
    }
    int switch_num = 0;
    int delete_id = 0;
    char buf[128];

    puts("欢迎 管理员登陆 菜单如下");
    puts("1、修改用户信息");
    puts("2、删除用户");
    puts("3、清空用户");
    printf("请输入你的的选择:");
    scanf("%d" , &switch_num);

    switch (switch_num)
    {
    case 1:  // 1、修改用户信息
        print_forward_double_link_list(dom_list);
        printf("请输入你要修改的用户");
        scanf("%s" , buf);
        root_amend( dom_list , root_list ,  buf);
        break;
    case 2:  // 2、删除用户
        print_forward_double_link_list(dom_list);
        printf("请输入你需要删除的用户\n");
        scanf("%s" , buf);
        delete_id = find_double_node_name_pos(dom_list, buf );
        delete_double_node( dom_list , delete_id );
        F_print(dom_list , "2_dom_data.txt");
        break;
    case 3:  // 3、清空用户
        print_forward_double_link_list(dom_list);
        clear_double_link_list(dom_list);
        F_print(dom_list , "2_dom_data.txt");
        break;
    default:
        break;
    }
    
/*
1、修改用户信息
2、删除用户
3、清空用户
*/

}


